package ru.niir.goodfil.ui.utils;

import org.apache.log4j.Logger;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Process {
    private static final Logger logger = Logger.getLogger(Process.class);

    public static boolean exists(String name) throws IOException, InterruptedException {
        /*
            По непонятной мне причине конвеер вида:
            ps ax | grep $name | grep -v grep"
            не работает.

            Т.е. его stdout почему-то не перехватывается. Так что придется погрепать вручную, другого варианта я не вижу

         */

        //  Ниже код, который бы работал, если бы работал конвеер
//
//        String cmd = "ps ax | grep \"" + name + "\" | grep -v grep";
//        System.out.println(">> " + cmd);
//        java.lang.Process process = Runtime.getRuntime().exec(cmd);
//        Thread.sleep(1000);
//        BufferedReader stdout = new BufferedReader(new InputStreamReader(process.getInputStream()));
//        String line = stdout.readLine();
//        while (line != null)
//        {
//            System.out.println("> " + line);
//            line = stdout.readLine();
//        }
//        return false;

        //  Ниже код, где grep выолняется вручную
        java.lang.Process process = Runtime.getRuntime().exec("tasklist /v /fo csv");
        BufferedReader stdout = new BufferedReader(new InputStreamReader(process.getInputStream()));
        String line;
        boolean found = false;
        do {
            line = stdout.readLine();
            if (line != null && line.indexOf(name) != -1 && line.indexOf("grep") == -1) found = true;
        }
        while (line != null);
        int exitCode = process.waitFor();
        return found;
    }

    private static final String EXISTS_STRING_OK = "ok";
    private static final String EXISTS_STRING_ERROR = "error";
    private static final String EXISTS_STRING_UNDEFINED = "undefined";

    public static String existsString(String name) {
        try {
            return exists(name) ? EXISTS_STRING_OK : EXISTS_STRING_ERROR;
        } catch (Exception e) {
            logger.error(e);
            return EXISTS_STRING_UNDEFINED;
        }
    }
}
